﻿var _factors10 = new Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
var _factors13 = new Array(1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1);

function _checkisbn10(isbn10) {
    if (isbn10.length != 10) {
        return false;
    } else {
        var sum = 0;
        for (var i = 0; i < 9; i++) {
            sum += isbn10.charAt(i) * _factors10[i];
        }
        var mod = sum % 11;
        var left = 11 - mod;
        if (left == 10) {
            return (isbn10.charAt(9) == "X");
        } else if (mod == 0) {
            return (isbn10.charAt(9) == "0");
        } else {
            return (isbn10.charAt(9) == left);
        }
    }
}

function _checkisbn13(isbn13) {
    if (isbn13.length != 13) {
        return false;
    } else {
        var sum = 0;
        for (var i = 0; i < 12; i++) {
            sum += isbn13.charAt(i) * _factors13[i];
        }
        var mod = sum % 10;
        var left = 10 - mod;
        if (mod == 0) {
            return (isbn13.charAt(12) == "0");
        } else {
            return (isbn13.charAt(12) == left);
        }
    }
}

function _matchisbn(isbn10, isbn13) {
    if (_checkisbn10(isbn10) && _checkisbn13(isbn13)) {
        for (var i = 0; i < 9; i++) {
            if (isbn10.charAt(i) != isbn13.charAt(i + 3)) {
                return false;
            }
        }
        return true;
    } else {
        return false;
    }
}

function checkisbn10(sender, args) {
    var isbn10_validator = $(".isbn10_validator")[0];
    var isbn13_validator = $(".isbn13_validator")[0];
    var isbn10_control = document.getElementById(isbn10_validator.controltovalidate);
    var isbn13_control = document.getElementById(isbn13_validator.controltovalidate);
    var isbn10 = $(isbn10_control).val();
    var isbn13 = $(isbn13_control).val();
    
    if (isbn10.length == 0 && isbn13.length == 0) {
        $(isbn10_validator).text("ISBN-10和ISBN-13不能同时为空");
        args.IsValid = false;

        $(isbn13_validator).text("ISBN-13和ISBN-10不能同时为空");
        $(isbn13_validator).css("display", "inline");
    } else if (isbn10.length > 0 && isbn13.length == 0) {
        $(isbn10_validator).text("请填写有效的10位ISBN");
        args.IsValid = _checkisbn10(isbn10);

        $(isbn13_validator).css("display", "none");
    } else if (isbn10.length == 0 && isbn13.length > 0) {
        args.IsValid = true;
    } else {
        $(isbn10_validator).text("ISBN-10和ISBN-13不匹配");
        args.IsValid = _matchisbn(isbn10, isbn13);

        if (!args.IsValid) {
            $(isbn13_validator).text("ISBN-13和ISBN-10不匹配");
            $(isbn13_validator).css("display", "inline");
        } else {
            $(isbn13_validator).css("display", "none");
        }
    }
}

function checkisbn13(sender, args) {
    var isbn10_validator = $(".isbn10_validator")[0];
    var isbn13_validator = $(".isbn13_validator")[0];
    var isbn10_control = document.getElementById(isbn10_validator.controltovalidate);
    var isbn13_control = document.getElementById(isbn13_validator.controltovalidate);
    var isbn10 = $(isbn10_control).val();
    var isbn13 = $(isbn13_control).val();
    
    if (isbn10.length == 0 && isbn13.length == 0) {
        $(isbn13_validator).text("ISBN-13和ISBN-10不能同时为空");
        args.IsValid = false;

        $(isbn10_validator).text("ISBN-10和ISBN-13不能同时为空");
        $(isbn10_validator).css("display", "inline");
    } else if (isbn10.length > 0 && isbn13.length == 0) {
        args.IsValid = true;
    } else if (isbn10.length == 0 && isbn13.length > 0) {
        $(isbn13_validator).text("请填写有效的13位ISBN");
        args.IsValid = _checkisbn13(isbn13);

        $(isbn10_validator).css("display", "none");
    } else {
        $(isbn13_validator).text("ISBN-13和ISBN-10不匹配");
        args.IsValid = _matchisbn(isbn10, isbn13);

        if (!args.IsValid) {
            $(isbn10_validator).text("ISBN-10和ISBN-13不匹配");
            $(isbn10_validator).css("display", "inline");
        } else {
            $(isbn10_validator).css("display", "none");
        }        
    }
}